// pages/songDetail/songDetail.js
import request from '../../static/utils/request'
import pubsub from 'pubsub-js'
import moment from 'moment';

// 获取全局变量
const appInstance = getApp();

Page({


  /**
   * 页面的初始数据
   */
  data: {
    isPlay: false, //控制摇杆，磁盘，音乐的播放
    id: '', // 歌曲id
    musicDetailData: {}, //歌曲详情数据
    musicLink: '', //歌曲播放链接
    currentTime: '00:00', //当前时间
    durationTime: '00:00', //总时间长
    currentWidth: 0, // 歌曲播放实时进度条
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function(options) {
    // options 是接收路由的传参
    console.log("重新渲染一次", options.musicId);
    this.setData({
      id: options.musicId >>> 0
    })

    // console.log(appInstance.globalData.musicId);
    // console.log(options.musicId);
    // 在页面进来的时候，先判断是不是在后台播放的歌曲
    if (appInstance.globalData.musicId && appInstance.globalData.musicId == options.musicId) {
      this.setData({
        isPlay: true
      })
    } else {
      this.setData({
        currentTime: '00:00',
        currentWidth: 0
      })
    }

    // 获取音乐静态详情
    this.getMusicDetail(this.data.id);

    // 获取音乐播放地址，控制音乐播放
    this.getMusicPlay(true, this.data.id);
    /*
    解决系统任务栏控制音乐播放状态显示不一致的问题
    */
    this.backgroundAudioManager = wx.getBackgroundAudioManager();
    // 监听音乐播放 暂停 停止
    this.backgroundAudioManager.onPlay(() => {
      this.changePlayState(true);
      appInstance.globalData.musicId = this.data.id;
    })
    this.backgroundAudioManager.onPause(() => {
      this.changePlayState(false);
    })
    this.backgroundAudioManager.onStop(() => {
      this.changePlayState(false)
    })

    // 监听音乐的实时播放
    this.backgroundAudioManager.onTimeUpdate(() => {
      // console.log("总时长 : ", this.backgroundAudioManager.duration);
      // console.log("实时时长 : ", this.backgroundAudioManager.currentTime);
      // 得到的是s，所以还需要时间格式化一下  moment()接受的是毫秒，所以要将秒转换成毫秒

      let currentTime = moment(this.backgroundAudioManager.currentTime * 1000).format('mm:ss');

      // 计算实时进度条  公式 （当前时间/总时间）= （当前进度条/总的进度条）
      let currentWidth = (this.backgroundAudioManager.currentTime / this.backgroundAudioManager.duration) * 450;
      this.setData({
        currentTime,
        currentWidth
      })
    })

    // // 监听音乐播放自然结束  自动播放下一首歌
    this.backgroundAudioManager.onEnded(() => {
      // 订阅来自recommend页面的musicId信息
      this.setData({
          musicDetailData: {},
          musicLink: '',
          currentTime: '00:00',
          currentWidth: 0
        }) //要清空一下
      pubsub.subscribe('musicId', (msg, musicId) => {
          // 将进度条重置
          this.getMusicDetail(musicId);
          this.getMusicPlay(true, musicId)
            // 就要取消订阅了
          pubsub.unsubscribe('musicId');
        })
        // 发送数据给recommend页面
      pubsub.publish('switchType', 'next');
    })

  },

  // 修改音乐播放状态
  changePlayState(isPlay) {
    this.setData({
      isPlay
    })
    appInstance.globalData.isMusicPlay = isPlay;
  },


  // 音乐暂停播放回调
  handleMusicPlay() {
    let isPlay = !this.data.isPlay;
    // console.log(isPlay);
    this.setData({
      isPlay
    })
    this.getMusicPlay(isPlay, this.data.id, this.data.musicLink);
  },

  async getMusicPlay(isPlay, musicID, musicLink) {

    if (isPlay) {
      // true 表示音乐播放

      if (!musicLink) {
        let musicPlay = await request('/song/url', {
          id: musicID
        });
        // console.log("歌曲详细信息：", this.data.musicDetailData);
        // console.log("获取播放地址：", musicPlay);
        musicLink = musicPlay.data[0].url;
        if (!musicLink) {
          wx.showToast({
            title: `${this.data.musicDetailData.name}--暂时无法播放`,
            icon: 'none',
            success: () => {
              wx.redirectTo({
                url: '/pages/recommendSong/recommendSong',
              });
            },
          });
          return;
        }
        this.setData({
          musicLink
        })
      }
      // console.log("musicLink:" + musicLink);
      this.backgroundAudioManager.src = musicLink;
      this.backgroundAudioManager.title = this.data.musicDetailData.name
    } else {
      // 暂停音乐的播放
      this.backgroundAudioManager.pause();
    }
  },

  // 获取音乐详情
  async getMusicDetail(musicId) {
    let musicDetail = await request('/song/detail', {
      ids: musicId
    });
    // console.log(musicDetail);
    let durationTime = moment(musicDetail.songs[0].dt).format('mm:ss');

    this.setData({
        musicDetailData: musicDetail.songs[0],
        durationTime
      })
      // wx.hideLoading();

    // 动态设置当前页面的标题
    wx.setNavigationBarTitle({
      title: this.data.musicDetailData.name,
    });

  },

  // 上一首下一首，实现两个页面之间的数据通信
  handleSwitchType(event) {
    this.setData({
        musicDetailData: {},
        musicLink: '',
        currentTime: '00:00',
        currentWidth: 0
      })
      // 暂停
      // this.backgroundAudioManager.pause();

    let type = event.currentTarget.id;
    // console.log(event.currentTarget.id);

    // 订阅来自recommend页面的musicId信息
    pubsub.subscribe('musicId', (msg, musicId) => {
      console.log(musicId);
      this.getMusicDetail(musicId);
      this.getMusicPlay(true, musicId)
        // 就要取消订阅了
      pubsub.unsubscribe('musicId');
    })

    // 发送数据给recommend页面
    pubsub.publish('switchType', type);
  },





  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function() {

  }
})